<?php

declare(strict_types=1);

namespace app\validate\org;

use app\model\Org;
use think\Validate;

class OrganizationValidate extends Validate
{
    protected $rule = [
        'id' => 'integer|gt:0',
        'name' => 'require|max:150',
        'org_type' => 'require|in:seller,buyer,both',
        'logo_url' => 'max:255',
        'region_id' => 'integer|egt:0',
        'status' => 'in:0,1,2',
        'extra' => 'checkArray',
        'profile' => 'checkProfile',
        'contact' => 'checkContact',
        'addresses' => 'checkAddresses',
    ];

    protected $message = [
        'name.require' => '组织名称不能为空',
        'name.max' => '组织名称不能超过150个字符',
        'org_type.require' => '组织类型不能为空',
        'org_type.in' => '组织类型不正确',
        'logo_url.max' => 'Logo地址过长',
        'region_id.integer' => '区域格式不正确',
        'region_id.egt' => '区域格式不正确',
        'status.in' => '状态不正确',
    ];

    protected $scene = [
        'create' => [
            'name',
            'org_type',
            'logo_url',
            'region_id',
            'status',
            'extra',
            'profile',
            'contact',
            'addresses',
        ],
        'update' => [
            'id',
            'name',
            'org_type',
            'logo_url',
            'region_id',
            'status',
            'extra',
            'profile',
            'contact',
            'addresses',
        ],
    ];

    protected function checkArray($value)
    {
        if ($value === null || $value === '') {
            return true;
        }

        if (!is_array($value)) {
            return '扩展信息格式不正确';
        }

        return true;
    }

    protected function checkProfile($value)
    {
        if ($value === null || $value === '') {
            return true;
        }

        if (!is_array($value)) {
            return '扩展资料格式不正确';
        }

        return true;
    }

    protected function checkContact($value)
    {
        if ($value === null || $value === '') {
            return true;
        }

        if (!is_array($value)) {
            return '联系信息格式不正确';
        }

        return true;
    }

    protected function checkAddresses($value)
    {
        if ($value === null || $value === '') {
            return true;
        }

        if (!is_array($value)) {
            return '地址列表格式不正确';
        }

        foreach ($value as $index => $item) {
            if (!is_array($item)) {
                return sprintf('第 %d 条地址格式不正确', $index + 1);
            }
        }

        return true;
    }
}
